home *** CD-ROM | disk | FTP | other *** search
- ; Shaders Script file
- ; Copyright (c) 2001-2003 Crytek Studios. All Rights Reserved.
- ; Author: Honich Andrey
-
- Version (1.00)
-
- //=========================================================================
- // Input binding:
- //
- // ATTR0: Vertex
- // ATTR1:
- // ATTR2: Normal
- // ATTR3: Color
- // ATTR4: Color1
- // ATTR5: FOGCOORD
- // ATTR8: TexCoord0
- // ATTR9: TexCoord1
- // ATTR10: TexCoord2
- // ATTR11: TexCoord3
- // ATTR12: TexCoord4
- // ATTR13: TexCoord5
- // ATTR14: Tangent
- // ATTR15: Binormal
- //=========================================================================
-
-
- //=========================================================================
- //Output registers:
- //
- // HPOS: Output vertex position
- // COL0: Primary color.
- // COL1: Secondary color.
- // TEX0: Tex. coords 0
- // TEX1: Tex. coords 1
- // TEX2: Tex. coords 2
- // TEX3: Tex. coords 3
- //=========================================================================
-
- #include "CGVPMacro.csi"
-
- Shader 'CGVProgramms'
- (
- HW
- (
- DeclareCGScript 'PosCommon'
- {
- float4 vPos = IN.Position;
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosBending'
- {
- float4 vPos = IN.Position;
-
- // Bend factor
- float fBF = max(vPos.z, 0) * Bend.z + Bend.w;
- fBF = fBF * fBF;
- fBF = fBF * fBF - Bend.w;
-
- float4 vP;
- vP.xy = Bend.xy * fBF;
-
- float fLength = length(vPos.xyz);
-
- vPos.xy = vPos.xy + vP.xy;
- float3 vDirect = normalize(vPos.xyz);
- vPos.xyz = vDirect * fLength;
-
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosBending_Merged'
- {
- float4 vPos = IN.Position;
- vPos.xyz = vPos.xyz - IN.Tex1.xyz;
-
- // Bend factor
- float fBF = max(vPos.z, 0) * IN.Color.z + vPos.w;
- fBF = fBF * fBF;
- fBF = fBF * fBF - vPos.w;
-
- float4 vP;
- vP.xy = IN.Color1.xy * fBF;
-
- float fLength = length(vPos.xyz);
-
- vPos.xy = vPos.xy + vP.xy;
- float3 vDirect = normalize(vPos.xyz);
- vPos.xyz = vDirect * fLength;
-
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosBending_Sprite'
- {
- float4 vPos = IN.Position - ObjPos;
-
- // Bend factor
- float fBF = max(vPos.z, 0) * Bend.z + Bend.w;
- fBF = fBF * fBF;
- fBF = fBF * fBF - Bend.w;
-
- float4 vP;
- vP.xy = Bend.xy * fBF;
-
- float fLength = length(vPos.xyz);
-
- vPos.xy = vPos.xy + vP.xy;
- float3 vDirect = normalize(vPos.xyz);
- vPos.xyz = vDirect * fLength;
-
- vPos = vPos + ObjPos;
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosBending_DetailObject'
- {
- float4 vPos = IN.Position;
-
- float4 Bend;
- Bend.w = IN.Position.w;
- Bend.z = 0.01; //IN.Color.w;
- sincos(Time.x+vPos.x*0.1+vPos.y*0.3, Bend.x, Bend.y);
-
- // Bend factor
- float fBF = max(vPos.z, 0) * Bend.z + Bend.w;
- fBF = fBF * fBF;
- fBF = fBF * fBF - Bend.w;
-
- float4 vP;
- vP.xy = Bend.xy * fBF;
-
- float fLength = length(vPos.xyz);
-
- vPos.xy = vPos.xy + vP.xy;
- float3 vDirect = normalize(vPos.xyz);
- vPos.xyz = vDirect * fLength;
-
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosBeam'
- {
- float4 vPos = IN.Position;
- float4 vNormal = normalize(IN.Normal);
- float fiOrigLength = 1/GeomConstants.x;
-
- // fLerp = vrt->x/OrigLength
- float fLerp = vPos.x * fiOrigLength;
-
- // Pos.x = fLerp * Length
- vPos.x = fLerp * CameraPos.w;
-
- // fCurRadius = Lerp(StartRadius, EndRadius, fLerp)
- float fCurRadius = lerp(GeomConstants.z, GeomConstants.w, fLerp);
-
- float fiOrigWidth = 1/GeomConstants.y;
- vPos.yz = vPos.yz * fiOrigWidth * fCurRadius;
-
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosSilhouete'
- {
- float3 vNormal = normalize(IN.Normal.xyz);
- float4 vPos;
- vPos.xyz = IN.Position.xyz + vNormal.xyz * Constants.x;
- vPos.w = IN.Position.w;
-
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosTerrainOverlay'
- {
- float3 normal = IN.Color.xyz * (2).xxx - IN.Position.www;
-
- float4 vPos;
- vPos.xyz = IN.Position.xyz + normal * (0.05).xxx;
- vPos.w = IN.Position.w;
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosFur'
- {
- // compute final vert pos = (norm*offset + vert)
- float4 vPos;
- vPos.xyz = IN.Position.xyz + IN.Normal.xyz * Modifiers.x;
- vPos.w = IN.Position.w;
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosWaterDeform'
- {
- float2 v = IN.Position.xy + NoisePos.xy;
-
- // 2D version of perlin noise
- float2 i = frac(v * 0.03125) * 32; // index between 0 and B-1
- float2 f = frac(v); // fractional position
-
- // lookup in permutation table
- float2 p;
- p[0] = pg[ i[0] ].w;
- p[1] = pg[ i[0]+1 ].w;
- p = p + i[1];
-
- // compute dot products between gradients and vectors
- float4 r;
- r[0] = dot( pg[ p[0] ].xy, f);
- r[1] = dot( pg[ p[1] ].xy, f - float2(1.0f, 0.0f) );
- r[2] = dot( pg[ p[0]+1 ].xy, f - float2(0.0f, 1.0f) );
- r[3] = dot( pg[ p[1]+1 ].xy, f - float2(1.0f, 1.0f) );
-
- // interpolate
- f = f*f*( float2(3.0f, 3.0f) - float2(2.0f, 2.0f)*f);
- r = lerp( r.xyyy, r.zwww, f[1] );
- float fNoise = lerp( r.x, r.y, f[0] );
-
- float4 vPos = IN.Position;
- vPos.z = vPos.z + fNoise * NoisePos.w;
-
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosWaterDeform_TNorm'
- {
- float2 v = IN.Position.xy + NoisePos.xy;
-
- // 2D version of perlin noise
- float2 i = frac(v * 0.03125) * 32; // index between 0 and B-1
- float2 f = frac(v); // fractional position
-
- // lookup in permutation table
- float2 p;
- p[0] = pg[ i[0] ].w;
- p[1] = pg[ i[0]+1 ].w;
- p = p + i[1];
-
- // compute dot products between gradients and vectors
- float4 r;
- r[0] = dot( pg[ p[0] ].xy, f);
- r[1] = dot( pg[ p[1] ].xy, f - float2(1.0f, 0.0f) );
- r[2] = dot( pg[ p[0]+1 ].xy, f - float2(0.0f, 1.0f) );
- r[3] = dot( pg[ p[1]+1 ].xy, f - float2(1.0f, 1.0f) );
-
- // interpolate
- f = f*f*( float2(3.0f, 3.0f) - float2(2.0f, 2.0f)*f);
- r = lerp( r.xyyy, r.zwww, f[1] );
- float fNoise = lerp( r.x, r.y, f[0] );
-
- float4 vPos = IN.Position;
- vPos.xyz = vPos.xyz + fNoise * NoisePos.w * IN.TNormal.xyz;
-
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosWaterDeform_PlusWaterLevel'
- {
- float2 v = IN.Position.xy + NoisePos.xy;
-
- // 2D version of perlin noise
- float2 i = frac(v * 0.03125) * 32; // index between 0 and B-1
- float2 f = frac(v); // fractional position
-
- // lookup in permutation table
- float2 p;
- p[0] = pg[ i[0] ].w;
- p[1] = pg[ i[0]+1 ].w;
- p = p + i[1];
-
- // compute dot products between gradients and vectors
- float4 r;
- r[0] = dot( pg[ p[0] ].xy, f);
- r[1] = dot( pg[ p[1] ].xy, f - float2(1.0f, 0.0f) );
- r[2] = dot( pg[ p[0]+1 ].xy, f - float2(0.0f, 1.0f) );
- r[3] = dot( pg[ p[1]+1 ].xy, f - float2(1.0f, 1.0f) );
-
- // interpolate
- f = f*f*( float2(3.0f, 3.0f) - float2(2.0f, 2.0f)*f);
- r = lerp( r.xyyy, r.zwww, f[1] );
- float fNoise = lerp( r.x, r.y, f[0] );
-
- float4 vPos = IN.Position;
- //float fDeltaZ = abs(WaterLevel.x - vPos.z);
- //fNoise = fNoise * clamp(fDeltaZ * WaterLevel.z, 0, vPos.w);
- //float fWaterAmplitude = (vPos.z < WaterLevel.x) ? 0 : NoisePos.w;
- vPos.z = WaterLevel.x + fNoise * NoisePos.w;
-
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
-
- DeclareCGScript 'PosCommon_PlusWaterLevel'
- {
- float4 vPos = IN.Position;
- vPos.z = WaterLevel.x;
-
- OUT.HPosition = mul(ModelViewProj, vPos);
- }
- )
- )
-
-